#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace __gnu_pbds;
#define ordered_set tree<int, null_type,less<int>, rb_tree_tag,tree_order_statistics_node_update>
using namespace std;
#define e "\n"
#define ll long long
#define all(v) v.begin(),v.end()
void fast() {
ios_base::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr);
#ifndef ONLINE_JUDGE
freopen("input.txt", "r", stdin),
freopen("output.txt", "w", stdout);
#endif
}
const ll mod = 1e9+7 , N = 3e5+2, M = 2e3+2;
int t,id;
int dx[] = {0, 0, 1, -1};
int dy[] = {1, -1, 0, 0};
ll gcd(ll a, ll b) { return (!b) ? a : gcd(b, a % b); }
ll lcm(ll a, ll b) { return a / gcd(a, b) * b; }
int freq[1 << 20];
void solve() {
string s;
cin >> s;
int curr;
for (int i = 0; i < s.size(); ++i) {
curr = 0;
for (int j = i; j < s.size(); ++j) {
if (curr & (1 << (s[j] - 'a')))break;
curr |= (1 << (s[j] - 'a'));
freq[curr] = (j - i) + 1;
}
}
// 2e7
int ans=1;
for (int i = 0; i < 1<<20; ++i)
for (int j = 0; j < 20; ++j)if ((1 << j) & i)
{
freq[i]= max(freq[i], freq[i^(1<<j)]);
}
int mx=0;
for (int i = 0; i < 1<<20; ++i) {
int cpy=(1<<20)-1-i;
mx= max(mx,freq[i]+freq[cpy]);
}
// cout<<freq[((1<<20)-1)|(1<<('f'-'a'))]<<e;
cout<<mx;
}
int main() {
fast();
t = 1,id=1;
//cin >> t ;
while (t--)
solve(),++id;
}
1302. Deepest Leaves Sum | 1209. Remove All Adjacent Duplicates in String II |
994. Rotting Oranges | 983. Minimum Cost For Tickets |
973. K Closest Points to Origin | 969. Pancake Sorting |
967. Numbers With Same Consecutive Differences | 957. Prison Cells After N Days |
946. Validate Stack Sequences | 921. Minimum Add to Make Parentheses Valid |
881. Boats to Save People | 497. Random Point in Non-overlapping Rectangles |
528. Random Pick with Weight | 470. Implement Rand10() Using Rand7() |
866. Prime Palindrome | 1516A - Tit for Tat |
622. Design Circular Queue | 814. Binary Tree Pruning |
791. Custom Sort String | 787. Cheapest Flights Within K Stops |
779. K-th Symbol in Grammar | 701. Insert into a Binary Search Tree |
429. N-ary Tree Level Order Traversal | 739. Daily Temperatures |
647. Palindromic Substrings | 583. Delete Operation for Two Strings |
518. Coin Change 2 | 516. Longest Palindromic Subsequence |
468. Validate IP Address | 450. Delete Node in a BST |